/**
 * 
 */
package pms.controller;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

import pms.dao.KategorieDao;
import pms.dao.MusikstueckDao;
import pms.om.Kategorie;
import pms.om.Musikstueck;
import pms.om.Stimme;

/** 
 * Controller to generate the Home Page basics to be rendered by a view. 
 * It extends the convenience class AbstractController that encapsulates most 
 * of the drudgery involved in handling HTTP requests. 
/**
 * @author roman.zaglauer@googlemail.com
 *
 */
public class EditMusikstueck extends AbstractController{
	private MusikstueckDao musikstueckDao;

	/** Getter
	 * @return the musikstueckDao
	 */
	public MusikstueckDao getMusikstueckDao() {
		return musikstueckDao;
	}

	/** Setter
	 * @param musikstueckDao the musikstueckDao to set
	 */
	public void setMusikstueckDao(MusikstueckDao musikstueckDao) {
		this.musikstueckDao = musikstueckDao;
	}

	@Override
	protected ModelAndView handleRequestInternal(HttpServletRequest httpServletRequest,
			HttpServletResponse httpServletResponse) throws Exception {
		ModelAndView mv = new ModelAndView();
		try {
			int id = Integer.parseInt(httpServletRequest.getParameter("id"));
			// wenn id nicht geparsed werden kann, dann wird ein neues Objekt angelegt
			mv.addObject("title", "Musikstueckbeschreibung bearbeiten");
			mv.addObject("message", "Ändern Sie die Bezeichnung des Musikstuecks und klicken Sie dann auf 'Änderungen übernehmen'.");
			mv.addObject("musikstueck", musikstueckDao.findById(id));
			
//			Kategorie aktkategorie = musikstueckDao.getKategorieDao().findById(musikstueckDao.findById(id).getKategorie().getId());
	
			Kategorie aktkategorie = musikstueckDao.findById(id).getKategorie();
			
			List<Kategorie> kategorieliste = musikstueckDao.getKategorieDao().findAll();
			List<Kategorie> kategorielistesort = new ArrayList<Kategorie>();
			kategorielistesort.add(aktkategorie);
			
			for (Kategorie kategorie : kategorieliste) {
				if (kategorie.getId() != aktkategorie.getId()) {
					kategorielistesort.add(kategorie);
				}
			}
			
			mv.addObject("kategorien", kategorielistesort);
			
		} catch (NumberFormatException e) {
			mv.addObject("title", "Neues Musikstueck anlegen");
			mv.addObject("message", "Geben Sie eine Bezeichnung für das neue Musikstueck an und klicken Sie dann auf 'Änderungen übernehmen'.");
			mv.addObject("musikstueck", new Musikstueck(null, null, null, null, null));
	
			mv.addObject("kategorien", musikstueckDao.getKategorieDao().findAll());
		}
		mv.setViewName("edit-musikstueck");
		return mv;
	}

}
